package com.workants.eboleta.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;

import com.workants.eboleta.model.PreSolicitud;
import com.workants.eboleta.model.Solicitante;
import com.workants.eboleta.model.Titular;
import com.workants.eboleta.model.Usuario;
import com.workants.eboleta.servicio.ServicioRegistro;

public class DaoSolicitudes {

	
	private static DaoSolicitudes instance;
	
	
	private DaoSolicitudes(){
		
	}
	
	
	public static DaoSolicitudes getInstance(){
		
		if(instance == null){
			instance = new DaoSolicitudes();
		}
		return instance;
	}


	public ArrayList<PreSolicitud> getPresolicitudes() {
		
		String consulta = "select * from v_presolicitudes where estadoSolicitud = 0";
		Vector<Object>datos = new Vector<Object>();
		ArrayList<PreSolicitud> preSolicitudes = new ArrayList<PreSolicitud>();
		ResultSet rs = null;	
		Conexion conexion;
		try {
			conexion = new Conexion();
			rs = conexion.queryConsulta(consulta, datos);
			while(rs.next()){
				PreSolicitud preSolicitud = new PreSolicitud();
				preSolicitud.setIdSolicitud(rs.getInt(1));
				preSolicitud.setTitular(new Titular());
				preSolicitud.getTitular().setIdPerona(rs.getInt(2));
				preSolicitud.getTitular().setNombre(rs.getString(3));
				preSolicitud.getTitular().setApellido(rs.getString(4));
				preSolicitud.getTitular().setTipoDocumentoTitular(rs.getString(5));
				preSolicitud.getTitular().setNumeroDeDocumentoTitular(rs.getString(6));
				preSolicitud.getTitular().setTipoTelefonoTitular(rs.getString(7));
				preSolicitud.getTitular().setNumeroDeTelefonoTitular(rs.getString(8));
				preSolicitud.getTitular().setTipoTelefonoAlternativoTitular(rs.getString(9));
				preSolicitud.getTitular().setNumeroDeTelefonoAlternativoTitular(rs.getString(10));
				preSolicitud.getTitular().setCorreoElectronicoTitular(rs.getString(11));
				
				
				
				if(rs.getInt(12) != 0){
					
					preSolicitud.setSolicitante(new Solicitante());
					preSolicitud.getSolicitante().setIdPerona(rs.getInt(12));
					preSolicitud.getSolicitante().setNombre(rs.getString(13));
					preSolicitud.getSolicitante().setApellido(rs.getString(14));
					preSolicitud.getSolicitante().setTipoDocumentoTitular(rs.getString(15));
					preSolicitud.getSolicitante().setNumeroDeDocumentoSolicitante(rs.getString(16));
					preSolicitud.getSolicitante().setTipoTelefonoSolicitante(rs.getString(17));
					preSolicitud.getSolicitante().setNumeroDeTelefonoSolicitante(rs.getString(18));
					preSolicitud.getSolicitante().setCorreoElectronicoSolicitante(rs.getString(19));

					
				}else preSolicitud.setSolicitante(null);
				preSolicitud.setTipoImpuesto(rs.getString(20));
				preSolicitud.setEstadoSolicitud(rs.getByte(22) > 0);
				preSolicitudes.add(preSolicitud);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return preSolicitudes;
	}


	public int acpetarSuscripcion(PreSolicitud presolicitud, Usuario usuario) {
																				
		String consulta = "update suscripciones set estadoSuscripcion = 1 where idSubcripcion = ? and idTitular = ?";
		Vector<Object>datos = new Vector<Object>();
		datos.add(presolicitud.getIdSolicitud());
		datos.add(presolicitud.getTitular().getIdPersona());
		int rta = 0;
		Conexion conexion;
		try {
			conexion = new Conexion();
			conexion.getConexion().setAutoCommit(false);
			rta = conexion.update(consulta, datos);
			if(rta > 0){
				
				//reset consulta,datos y luego insert en log
				datos.clear();
				consulta = "insert into log (fecha, servicio , metodo, tipo, idPersona) values (?,?,?,?,?)";
				datos.add(new Timestamp(new Date().getTime()));
				datos.add("servicioSolicitudes");
				datos.add("acpetarSuscripcion(presolicitud:"+presolicitud.getIdSolicitud()+", usuario:"+usuario.getIdPersona()+")");
				datos.add("usuario MCR");
				datos.add(usuario.getIdPersona());					
				int idLog = conexion.insert(consulta, datos);				
				conexion.getConexion().commit();
			}
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return rta;
	}


	public int cancelarSuscripcion(PreSolicitud presolicitud, Usuario usuario) {
		
		String consulta = "update suscripciones set estadoSuscripcion = 2 where idSubcripcion = ? and idTitular = ?";
		Vector<Object>datos = new Vector<Object>();
		datos.add(presolicitud.getIdSolicitud());
		datos.add(presolicitud.getTitular().getIdPersona());
		int rta = 0;
		Conexion conexion;
		try {
			conexion = new Conexion();
			conexion.getConexion().setAutoCommit(false);
			rta = conexion.update(consulta, datos);
			if(rta > 0){
				
				//reset consulta,datos y luego insert en log
				datos.clear();
				consulta = "insert into log (fecha, servicio , metodo, tipo, idPersona) values (?,?,?,?,?)";
				datos.add(new Timestamp(new Date().getTime()));
				datos.add("servicioSolicitudes");
				datos.add("cancelarSuscripcion(presolicitud:"+presolicitud.getIdSolicitud()+", usuario:"+usuario.getIdPersona()+")");
				datos.add("usuario MCR");
				datos.add(usuario.getIdPersona());					
				int idLog = conexion.insert(consulta, datos);				
				conexion.getConexion().commit();
			}
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return rta;
	}
}
